contents
하드 링크는 동일한 파일에 대한 또 다른 이름이며, 심볼릭 링크(또는 심링크)는 파일의 경로를 가리키는 바로 가기입니다.
핵심적인 차이점은 무엇을 가리키느냐에 있습니다. 하드 링크는 디스크에 있는 파일의 데이터에 직접 연결되는 반면, 심볼릭 링크는 파일의 이름을 가리킵니다.
기초: 아이노드 (Inode) 📂
링크를 이해하려면 먼저 리눅스나 macOS와 같은 파일 시스템이 파일을 어떻게 추적하는지 이해해야 합니다. 디스크의 모든 파일과 디렉터리에는 해당 파일에 대한 모든 메타데이터를 저장하는 데이터 구조인 **아이노드(inode)**가 있습니다.
아이노드는 파일 이름과 실제 파일 내용을 제외한 모든 것을 저장합니다. 여기에는 다음이 포함됩니다.
- 권한 (읽기, 쓰기, 실행)
- 소유자 및 그룹
- 파일 크기
- 타임스탬프 (생성, 수정, 접근 시간)
- 파일 내용이 저장된 디스크의 실제 데이터 블록을 가리키는 포인터
- 링크 카운트: 이 아이노드를 가리키는 하드 링크의 수
디렉터리는 단순히 파일 이름과 해당 아이노드 번호의 목록을 포함하는 특별한 파일입니다.
작동 방식: 파일 이름 → 아이노드 번호 → 아이노드 (메타데이터) → 데이터 블록
하드 링크: 동일한 파일의 또 다른 이름
하드 링크는 원본 파일과 정확히 동일한 아이노드 번호를 가리키는 새로운 디렉터리 항목(새 파일 이름)입니다.
비유: "로버트"라는 이름의 사람이 "밥"으로도 알려진 경우와 같습니다. 두 이름 모두 정확히 같은 사람을 지칭합니다. 이들은 사본이 아니라 한 개인에 대한 두 개의 다른 이름입니다.
어떤 일이 일어나는가?
- 생성: 하드 링크를 생성하면, 해당 아이노드의 링크 카운트가 1 증가합니다. 이제 하나의 아이노드를 가리키는 두 개의 파일 이름을 갖게 됩니다.
- 수정: 어느 이름으로든 파일을 편집하면, 근본적인 데이터가 변경됩니다. 두 이름 모두 동일한 아이노드와 데이터 블록을 가리키므로, 변경 사항은 두 파일 이름을 통해 모두 볼 수 있습니다.
- 삭제: 하드 링크(또는 원본 파일 이름)를 삭제하면, 디렉터리에서 해당 파일 이름이 제거되고 아이노드의 링크 카운트가 1 감소합니다. 링크 카운트가 0보다 큰 한 파일의 데이터는 삭제되지 않습니다.
- 최종 삭제: 파일의 데이터는 링크 카운트가 0이 될 때 비로소 디스크에서 삭제됩니다.
주요 특징
- 두 이름 모두 동일한 아이노드와 데이터를 공유합니다.
- 하나의 이름을 삭제해도 모든 이름이 사라질 때까지 데이터는 삭제되지 않습니다.
- 파일 시스템이나 파티션을 넘을 수 없습니다. 아이노드 번호는 자체 파일 시스템 내에서만 고유합니다.
- 디렉터리에 대해서는 생성할 수 없습니다. 이는 파일 시스템 트리에서 무한 루프(예: 부모 디렉터리 중 하나에 대한 링크를 포함하는 디렉터리)를 방지하기 위한 제한입니다.
심볼릭 링크 (심링크): 파일로 가는 바로 가기
심볼릭 링크는 자신만의 고유한 아이노드를 가진 새롭고 별개의 파일입니다. 이 특별한 파일의 데이터 내용은 단순히 대상 파일의 경로를 포함하는 텍스트 문자열입니다.
비유: 바탕 화면의 바로 가기와 같습니다. 바로 가기는 그것이 가리키는 프로그램의 위치 정보만 담고 있는 작은 파일일 뿐, 프로그램 자체가 아닙니다.
어떤 일이 일어나는가?
- 생성: 자신만의 아이노드를 가진 새 파일이 생성됩니다. 이 파일의 내용은 원본 파일의 경로입니다. 원본 파일의 링크 카운트는 영향을 받지 않습니다.
- 접근: 심볼릭 링크에 접근하면, 운영 체제는 심볼릭 링크에서 경로를 읽은 다음 그 경로를 따라 대상 파일로 이동합니다. 이 리디렉션은 대부분의 애플리케이션에 투명하게 이루어집니다.
- 심볼릭 링크 삭제: 심볼릭 링크를 삭제하면, 바로 가기만 삭제하는 것입니다. 원본 파일은 전혀 영향을 받지 않습니다.
- 원본 파일 삭제: 원본 파일을 삭제하면, 심볼릭 링크는 남아 있지만 이제 아무것도 가리키지 않게 됩니다. 이는 "끊어진" 링크가 됩니다.
주요 특징
- 대상 파일과는 별개의 자신만의 아이노드를 가집니다.
- 파일 _경로_에 대한 포인터일 뿐입니다.
- 원본 파일이 이동되거나 삭제되면 링크는 끊어집니다.
- 파일 시스템이나 파티션을 넘을 수 있습니다.
- 디렉터리에 대해서도 생성할 수 있습니다.
주요 차이점 요약 ⚖️
| 특징 | 하드 링크 | 심볼릭 링크 |
|---|---|---|
| 가리키는 대상 | 파일의 아이노드 | 파일의 경로 (텍스트 문자열) |
| 아이노드 | 원본과 동일한 아이노드 공유 | 자신만의 별개 아이노드를 가짐 |
| 삭제 효과 | 링크 삭제 시 링크 카운트 감소. 카운트가 0이 될 때 데이터 삭제. | 링크 삭제는 원본 파일에 영향 없음. |
| 파일 시스템 교차 | 불가능 | 가능 |
| 디렉터리 링크 | 불가능 | 가능 |
원본 파일과 아이노드에 일어나는 일
마지막 질문에 대한 답변으로, 동작을 요약하면 다음과 같습니다.
- 하드 링크:
- 하드 링크를 삭제할 때: 아이노드의 링크 카운트가 1 감소합니다. 카운트가 여전히 0보다 크다면, "원본 파일"(디스크 상의 데이터)은 안전하며 변경되지 않습니다.
- 마지막 하드 링크를 삭제할 때: 아이노드의 링크 카운트가 0이 됩니다. 운영 체제는 이제 이 데이터를 가리키는 파일 이름이 없다는 것을 알고, 해당 아이노드와 연관된 데이터 블록을 덮어쓸 수 있는 여유 공간으로 표시합니다. 파일은 사실상 삭제됩니다.
- 심볼릭 링크:
- 심볼릭 링크를 삭제할 때: 원본 파일과 그 아이노드는 전혀 영향을 받지 않습니다. 링크 카운트는 변경되지 않습니다. 당신은 바로 가기만 삭제한 것입니다.
- 원본 파일을 삭제할 때: 심볼릭 링크 파일은 남아 있지만, 이제 존재하지 않는 경로를 가리키는 끊어진 링크가 됩니다.
references